//*****************************************************************************
// JFab (http://code.google.com/p/jfab)
// Copyright (c) 2011 JFab.org
// Admin jfab@jeffreythompson.net
//
// See the file "LICENSE.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//*****************************************************************************

package org.jfab.core.io;

import org.jfab.core.formatter.Formatter;
import org.jfab.core.model.CGClass;
import org.jfab.core.model.CGEnum;
import org.jfab.core.model.CGInterface;

/**
 * Defines methods required by an I/O injector.
 */
public interface IOInjector
{
    /**
     * @return a new basic code generator.
     */
    BasicCodeGenerator injectBasicCodeGenerator();

    /**
     * @return a new code generator class writer.
     */
    CGWriter<CGClass> injectCGClassWriter();

    /**
     * @return a new code generator enum writer.
     */
    CGWriter<CGEnum> injectCGEnumWriter();

    /**
     * @return a new code generator interface writer.
     */
    CGWriter<CGInterface> injectCGInterfaceWriter();

    /**
     * @return a new code formatter.
     */
    Formatter injectFormatter();

    /**
     * @return a new writer group.
     */
    WriterGroup injectWriterGroup();
}
